/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 言初
 * Date: 2023-12-25
 * Time: 22:22
 */


///   7-19 小伍的背包问题  注意到金属是可以被任意分割的


/* #include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

        void func(vector<vector<long long>>& arr, int n, int v) {
        // 求解每个物品的单位价值
        vector<vector<long long>>& array = arr;

        // 对array数组进行降序排序（针对第二列）
        // 按列从大到小排序（按照第2列的数字进行排序的）（降序）
        sort(array.begin(), array.end(), [](const vector<long long>& o1, const vector<long long>& o2) {
        // 按照第2列的数字进行排序的---降序
        return o2[1] < o1[1];
        });



    *//*for循环的写法一
    long long value = 0;
    long long V = v;
    int j = 0;

    for(int i = 0;i < n && V > 0;++i) {
        if(array[i][0] <= V) {
            V -= array[i][0];
            value += (array[i][0]) * array[i][1];
        } else {
            value += array[i][1] * V;
            break;
        }
    }*//*



        // for循环的写法二
        //这个for循环还是很重要的，要注意书写方式，
        //有一种可能就是背包的容量很大，那可能把所有的矿石都装进去了，还有剩余的空间，
        //这个时候，就要使用现在的这2种for循环的写法才能正确解决问题，所有的价值的加加都是在for循环中进行完成的，
        //避免了背包容量很大的这个时候（所有矿石都装进去了，还有剩余空间），自己设计的标记位出错
        long long value = 0;
        long long V = 0;
        for (int i = 0; i < n; i++) {
        if (V + array[i][0] <= v) {
        V += array[i][0];
        value += (array[i][0]) * array[i][1];
        } else {
        value += (v - V) * array[i][1];
        break;
        }
        }


        cout << value << endl;
        }

        int main() {
        int n, v;
        cin >> n >> v;

        vector<vector<long long>> arr(n, vector<long long>(2));

        for (int i = 0; i < n; i++) {
        cin >> arr[i][0] >> arr[i][1];
        arr[i][1] = arr[i][1] / arr[i][0];
        }

        func(arr, n, v);

        return 0;
        }*/









/*

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int v=sc.nextInt();
        long[][] arr=new long[n][2];
        for(int i=0;i<n;i++){
            arr[i][0]=sc.nextLong();
            arr[i][1]=sc.nextLong();
            arr[i][1] = arr[i][1]/arr[i][0];
        }
        func(arr,n,v);
    }

    public static void func(long[][] arr,int n,int v){
        //求解每个物品的单位价值
        long[][] array=arr;
        // long 类型
        //对array数组进行降序排序（针对第二列）
        // 按列从大到小排序（按照第2列的数字进行排序的）（降序）
        Arrays.sort(array, new Comparator<long[]>() {
            @Override
            public int compare(long[] o1, long[] o2) {
                //按照第2列的数字进行排序的---降序
                if((o2[1] - o1[1])>0)
                    return 1;
                else if((o2[1] - o1[1])<0){
                    return -1;
                }
                else{
                    return 0;
                }
            }
        });

        long value=0;
        long V=0;
        for(int i=0;i<n;i++){
            if(V+array[i][0] <= v){
                V+=array[i][0];
                value+=(long)array[i][0]*array[i][1];
            }else{
                value+=(v-V)*array[i][1];
                break;
            }
        }


        System.out.println(value);
    }
}
*/